package com.yugao.fintech.antelope.base.model.module.auth;

import com.yugao.fintech.framework.assistant.utils.exception.BizException;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;

/**
 * 授权类型（模式）的枚举
 *
 * @author shenguangayng
 */
@AllArgsConstructor
@Getter
public enum GrantTypeEnum {
    // 密码模式
    PASSWORD("1", "password"),
    // 授权码模式
    AUTHORIZATION_CODE("2", "authorization_code"),
    // 简化模式
    IMPLICIT("3", "implicit"),
    // 客户端模式
    CLIENT_CREDENTIALS("4", "client_credentials"),
    // 刷新模式
    REFRESH_TOKEN("5","refresh_token"),
    // app模式, 主要用于短信或者邮箱验证码登录
    APP("6", "app"),

    // 以下是第三方授权方式
    QQ("20", "qq"),
    // 微信h5授权登录
    WEIXIN_H5("21", "wx_h5"),
    // 微信小程序授权登录
    WEIXIN_MA("22", "wx_ma"),
    GITEE("23", "gitee"),
    // 微信公众号二维码扫码登录
    WEXIN_MP_SCAN("24", "wx_mp_scan"),
    // 微信小程序二维码扫码登录
    WEXIN_MA_SCAN("25", "wx_ma_scan"),
    // 钉钉扫码登录
    DINGTALK("26", "dingtalk"),

    ;

    private final String codeNumber;

    private final String code;

    public static GrantTypeEnum of(String code) {
        return Arrays.stream(values()).filter(e -> e.getCode().equals(code)).findFirst()
                .orElseThrow(() -> new BizException("暂不支持 {} 授权方式", code));
    }

}
